﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;
using UI_SATT.Properties;

namespace UI_SATT
{
    public partial class FrmNuevaInscripcion : Form, IListadoEventos, IListadoTorneos ,IInterfazInscripcion
    {
        string ImplementaEventos = "EventoService";
        string ImplementaTorneos = "TorneoService";
        string ImplementaPersona = "PersonaService";
        string ImplementaInscripcion = "InscripcionService";
        ITorneoService TorneoServicio;
        IPersonaService PersonaServicio;
        IInscripcionService InscripcionService;
        string[][] ListaDeTorneos;
        int CurrentDni;
        int Inscripcion;
        public FrmNuevaInscripcion()
        {
            InitializeComponent();
        }
        
        private void FrmNuevaInscripcion_Load(object sender, EventArgs e)
        {
            Inscripcion = 0;
            chkEstado.Checked = true;
            IEventoService EventoServicio = (IEventoService)AppContext.Instance.GetObject(ImplementaEventos);
            EventoServicio.Listar(this);
            TorneoServicio = (ITorneoService)AppContext.Instance.GetObject(ImplementaTorneos);
            PersonaServicio = (IPersonaService)AppContext.Instance.GetObject(ImplementaPersona);
            InscripcionService = (IInscripcionService)AppContext.Instance.GetObject(ImplementaInscripcion);
        }

        private void ChkDobles_CheckedChanged(object sender, EventArgs e)
        {
            if (ChkDobles.Checked)
                txtJugador2.Enabled = true;
            else
            {
                txtJugador2.Text = "";
                txtJugador2.Enabled = false;
                pbJugador2.Visible = false;
                lblAlerta.Visible = false;
            }
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void BtnNuevaInscripcion_Click(object sender, EventArgs e)
        {
            if (txtJugador1.Text != txtJugador2.Text)
            {
                this.CurrentDni = int.Parse(txtJugador1.Text);
                try
                {
                    this.Inscripcion = InscripcionService.Agregar(this);
                    if (ChkDobles.Checked)
                    {
                        this.CurrentDni = int.Parse(txtJugador2.Text);
                        InscripcionService.Agregar(this);
                    }
                    MessageBox.Show("Inscripción al Torneo Realizada con éxito. Nro. de Inscripción: " + Inscripcion.ToString());
                    //ReporteSATT.CuponInscripcion imprimir = new ReporteSATT.CuponInscripcion();
                    //imprimir.ImprimirCuponInscripcion(Inscripcion);
                    this.Inscripcion = 0;
                    this.LimpiarCampos();
                }
                catch (Exception ex)
                {
                    this.LimpiarCampos();
                    lblAlerta.Visible = true;
                    lblAlerta.Text = ex.Message;
                }
            }
            else
                MessageBox.Show("No puede inscribir dos jugadores iguales.");
            
        }

        #region Miembros de IListadoEventos

        public List<string> ListaEventos
        {
            set 
            {
                CboEvento.DataSource = value;
                CboEvento.SelectedIndex = -1;
            }
        }

        #endregion

        #region Miembros de IListadoTorneos

        public string Evento
        {
            get { return CboEvento.SelectedItem.ToString(); }
        }

        public string[][] ListaTorneos
        {
            set 
            {
                ListaDeTorneos = value;
                if (CboTorneo.Items.Count > 0)
                    CboTorneo.Items.Clear();
                foreach (string[] Objeto in value)
                {
                    CboTorneo.Items.Add(Objeto[0] + ", " + Objeto[1] + ", " + Objeto[2]);
                }
                CboTorneo.SelectedIndex = -1;
            }
        }

        #endregion

        private void CboEvento_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CboTorneo_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void txtJugador1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                pbJugador1.Visible = true;
                string Nombre = PersonaServicio.ObtenerNombre(int.Parse(txtJugador1.Text), "Afiliado");
                if (Nombre == "")
                {
                    lblAlerta.Visible = true;
                    lblAlerta.Text = "El jugador 1 ingresado no existe.";
                    this.pbJugador1.BackgroundImage = Resources.Error;
                    this.pbJugador1.BackgroundImageLayout = ImageLayout.Stretch;
                }
                else
                {
                    
                    lblAlerta.Visible = false;
                    this.pbJugador1.BackgroundImage = Resources.ok;
                    this.pbJugador1.BackgroundImageLayout = ImageLayout.Stretch;
                }
            }
        }

        private void txtJugador2_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                pbJugador2.Visible = true;
                string Nombre = PersonaServicio.ObtenerNombre(int.Parse(txtJugador2.Text), "Afiliado");
                if (Nombre == "")
                {
                    lblAlerta.Visible = true;
                    lblAlerta.Text = "El jugador 2 ingresado no existe."; 
                    this.pbJugador2.BackgroundImage = Resources.Error;
                    this.pbJugador2.BackgroundImageLayout = ImageLayout.Stretch;
                }
                else
                {
                    lblAlerta.Visible = false;
                    this.pbJugador2.BackgroundImage = Resources.ok;
                    this.pbJugador2.BackgroundImageLayout = ImageLayout.Stretch;
                }
            }
        }

        private void CboEvento_SelectionChangeCommitted(object sender, EventArgs e)
        {
            TorneoServicio.ListarTorneosAbiertos(this);
        }

        #region Miembros de IInterfazInscripcion

        public int NroInscripcion
        {
            get
            {
                return Inscripcion;
            }
        }

        public int Dni
        {
            get
            {
                return this.CurrentDni;
            }
        }

        public string EventoInscripcion
        {
            get { return CboEvento.SelectedItem.ToString(); }
        }

        public string[] Torneo
        {
            get
            {
                return ListaDeTorneos[CboTorneo.SelectedIndex];
            }
        }

        public DateTime Fecha 
        {
            get
            {
                return DateTime.Today;
            }
        }

        public bool Estado
        {
            get
            {
                return chkEstado.Checked;
            }
        }

        #endregion

        private void LimpiarCampos()
        {
            lblAlerta.Visible = false;
            pbJugador1.Visible = false;
            pbJugador2.Visible = false;
            txtJugador1.Text = "";
            txtJugador2.Text = "";
            ChkDobles.Checked = false;
            CboEvento.SelectedIndex = -1;
            CboTorneo.SelectedIndex = -1;
        }

        private void txtNroInscripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsNumber(e.KeyChar) || e.KeyChar == 8)
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void txtNroInscripcion_TextChanged(object sender, EventArgs e)
        {
            if (txtNroInscripcion.Text != "")
            {
                ChkDobles.Checked = false;
                txtJugador2.Text = "";
                txtJugador2.Enabled = false;
                this.Inscripcion = int.Parse(txtNroInscripcion.Text);
            }
        }

        private void CboTorneo_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (CboEvento.SelectedIndex > -1)
            {
                if (ListaDeTorneos[CboTorneo.SelectedIndex][1] == "Single")
                {
                    ChkDobles.Enabled = false;
                    txtJugador2.ReadOnly = true;
                    txtNroInscripcion.ReadOnly = true;
                }
                else
                {
                    ChkDobles.Enabled = true;
                    txtJugador2.ReadOnly = false;
                    txtNroInscripcion.ReadOnly = false;
                }
            }
        }
    }
}
